#pragma once

#include "Globals.h"
#include "Point.h"
#include "rapidxml.hpp"

using namespace rapidxml;

namespace game_engine { namespace data_format
{

/*!
 * \class FrameInfo
 * \brief 
 */
class FrameInfo
{
///////////////////////////////////////////////////////////////////////////////
// Attribute definition
///////////////////////////////////////////////////////////////////////////////
private:
    //INT32 id;
    utils::Point coord;
    INT32 duration;
    BOOL flipHorizontally;
    BOOL flipVertically;
    FLOAT32 rotation;
    FLOAT32 scale;

///////////////////////////////////////////////////////////////////////////////
// Method definition
///////////////////////////////////////////////////////////////////////////////
public:
    // Constructors and Destructors
    FrameInfo(void);
    FrameInfo(const utils::Point &c, const INT32 t, const BOOL flipH = false,
        const BOOL flipV = false, const FLOAT32 rot = 0.0, 
        const FLOAT32 sca = 1.0);
    virtual ~FrameInfo(void);

    // Others
    void parse(xml_node<> *node);

    // Getters
    const utils::Point& getCoord(void) const;
    const INT32 getDuration(void) const;
    const BOOL getFlipHorizontally(void) const;
    const BOOL getFlipVertically(void) const;
    const FLOAT32 getRotation(void) const;
    const FLOAT32 getScale(void) const;

private:
    void getFrameInfo(xml_node<> *node);
    BOOL getBoolean(const string &val) const;

};

}}
